import request from '@/utils/request'

export function CreateUser(userDto) {
  return request({
    url: '/services/app/User/Create',
    method: 'post',
    data: userDto
  })
}

export function Update(userDto) {
  return request({
    url: '/services/app/User/Update',
    method: 'put',
    data: userDto
  })
}

export function CreateAdmin(userDto) {
  return request({
    url: '/services/app/User/CreateAdmin',
    method: 'post',
    data: userDto
  })
}

export function GetPageList(query) {
  return request({
    url: '/services/app/User/GetPageList',
    method: 'get',
    params: query
  })
}

export function GetBaseUserInfo(dto) {
  return request({
    url: '/services/app/User/GetUserInfo',
    method: 'get',
    params: dto
  })
}

export function GetUserFinancialPageList(query) {
  return request({
    url: '/services/app/User/GetUserFinancialPageList',
    method: 'get',
    params: query
  })
}

export function Recharge(dto) {
  return request({
    url: '/services/app/User/Recharge',
    method: 'post',
    data: dto
  })
}

export function Transfer(dto) {
  return request({
    url: '/services/app/User/Transfer',
    method: 'post',
    data: dto
  })
}

export function ChangePassword(dto) {
  return request({
    url: '/services/app/User/ChangePassword',
    method: 'post',
    data: dto
  })
}

export function ChangeUserActiveState(dto) {
  return request({
    url: '/services/app/User/ChangeUserActiveState',
    method: 'post',
    data: dto
  })
}

export function ResttPassword(dto) {
  return request({
    url: '/services/app/User/ResttPassword',
    method: 'post',
    data: dto
  })
}

var checkIdcard = num => {
  num = num.toUpperCase()
  // 身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。
  if (!(/^\d{17}([0-9]|X)$/.test(num))) {
    return '输入的身份证号长度不对，或者号码不符合规定！\n长度应为18位,号码末位可以为数字或X'
  }
  // 校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
  // 下面分别分析出生日期和校验位
  var re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
  var arrSplit = num.match(re)

  // 检查生日日期是否正确
  var dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
  var bGoodDay = (dtmBirth.getFullYear() === Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) === Number(arrSplit[3])) && (dtmBirth.getDate() === Number(arrSplit[4]))
  if (!bGoodDay) {
    return '输入的身份证号里出生日期不对！'
  } else {
    // 检验18位身份证的校验码是否正确。
    // 校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
    var valnum
    var arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    var arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
    var nTemp = 0
    for (var i = 0; i < 17; i++) {
      nTemp += num.substr(i, 1) * arrInt[i]
    }
    valnum = arrCh[nTemp % 11]
    if (valnum !== num.substr(17, 1)) {
      return '18位身份证的校验码不正确！应该为：' + valnum
    }
    return ''
  }
}

export function ValidateIdcard(rule, value, callback) {
  var r = checkIdcard(value)
  if (!r) {
    callback()
  } else {
    callback(new Error(r))
  }
}
